package com.bosssoft.hr.train.j2se.exception;

/**
 * @Class BusinessException
 * @Description 继承RuntimeException 支持错误发生的通过异常转化抛出自定义异常，
 * 自定义异常要求持有异常码，异常消息，原异常的信息，
 * @Author TangZaoBang
 * @Date 2023/04/27 12:08
 * @Version
 */

public class BusinessException  extends RuntimeException {
    /**
     * 错误码 建议是String 类型更加灵活
     */
    private final String code;

    /**
     *  构建用户自动以异常对象
     *  通常是 if xx!=xxx then throw new BusinessException()
     * @param code  错误码 有一个业务和错误的映射关系表
     * @param message  错误消息 提示给用户看
     * @param cause 具体的异常信息，用于日志中输出便于分析诊断问题
     */
    public BusinessException(String code, String message, Throwable cause) {
        super(message, cause);
        this.code=code;
    }


    /**
     * 通过枚举构建异常对象这种方式更加友好
     * @param exceptionCode 枚举对象 包括错误码和消息这个是更加友好的定义方式
     */
    public BusinessException(ExceptionCode exceptionCode){
        super(exceptionCode.getMsg());
        this.code = exceptionCode.getCode();
    }

    /**
     *  构建用户自动以异常对象
     *  通常是 if xx!=xxx then throw new BusinessException()
     * @param exceptionCode
     * @param cause
     */
    public BusinessException(ExceptionCode exceptionCode, Throwable cause){
        super(cause.getMessage(),cause);
        this.code = exceptionCode.getCode();
    }

    public String getCode() {
        return code;
    }

}
